import java.util.ArrayList;

class Auteur {

    /*******************************************
     * Completez le programme a partir d'ici.
     *******************************************/
	private String nom;
	private boolean estAuteurPrime = false;
	
	public Auteur(String n, boolean eap){
		nom = n;
		estAuteurPrime = eap;
	}
	
	public Auteur(String n){
		nom = n;
	}
	
	public String getNom(){
		return nom;
	}
	
	public boolean getPrix()
	{
		if(estAuteurPrime == true){
			return true;
		}
		return false;
	}
/*******************************************
 * Ne pas modifier apres cette ligne
 * pour pr'eserver les fonctionnalit'es et
 * le jeu de test fourni.
 * Votre programme sera test'e avec d'autres
 * donn'ees.
 *******************************************/
}

class Oeuvre
{
	private String titre;
	private Auteur auteur;
	private String langue = "francais";
	
	public Oeuvre(String t, Auteur a, String l){
		titre = t;
		auteur = a;
		langue = l;
	}
	
	public Oeuvre(String t, Auteur a){
		titre = t;
		auteur = a;
	}
	
	public String getTitre(){
		return titre;
	}
	
	public Auteur getAuteur(){
		return auteur;
	}
	
	public String getLangue(){
		return langue;
	}
	
	public void afficher(){
		System.out.println(getTitre() + ", " + getAuteur().getNom() + ", en " + getLangue());
	}
}

class Exemplaire{
	private Oeuvre oeuvre;
	
	public Exemplaire(Oeuvre o){
		oeuvre = o;
		System.out.println("Nouvel exemplaire -> " + oeuvre.getTitre() + ", " +
		 oeuvre.getAuteur().getNom() + ", en " + oeuvre.getLangue());
	}
	
	public Exemplaire(Exemplaire autreExemplaire){
		oeuvre = autreExemplaire.oeuvre;
		System.out.println("Copie d'un exemplaire de -> " + oeuvre.getTitre() + ", " +
				 oeuvre.getAuteur().getNom() + ", en " + oeuvre.getLangue());
	}
	
	public Oeuvre getOeuvre(){
		return oeuvre;
	}
	
	public void afficher(){
		System.out.println("Un exemplaire de " + oeuvre.getTitre() + ", " +
				 oeuvre.getAuteur().getNom() + ", en " + oeuvre.getLangue());
	}
}

class Bibliotheque{
	private String nom;
	private ArrayList<Exemplaire> exemplaires = 
			new ArrayList<Exemplaire>();
	
	public Bibliotheque(String n){
		nom = n;
		System.out.println("La bibliotheque " + getNom() + " est ouverte !");
	}
	
	public String getNom(){
		return nom;
	}
	
	public void stocker(Oeuvre oe, int n){
		for(int i=0; i < n; i++){
			Exemplaire exemplaire = new Exemplaire(oe);
			exemplaires.add(exemplaire);
		}
	}

	public void stocker(Oeuvre oe) {
		Exemplaire exemplaire = new Exemplaire(oe);
		exemplaires.add(exemplaire);
	}
	
	
	public ArrayList<Exemplaire> listerExemplaires(String langue){
		ArrayList<Exemplaire> exemplairesConcrets = new ArrayList<Exemplaire>();
		
		for(Exemplaire exemplaire : exemplaires){
    		if(langue == exemplaire.getOeuvre().getLangue()){
    			exemplairesConcrets.add(exemplaire);
    		}
    	}
		return exemplairesConcrets;
	}
	
    public ArrayList<Exemplaire> listerExemplaires(){
    	return exemplaires;
	} 
	
    public int compterExemplaires(Oeuvre oeuvre){
    	int count = 0;
    	
    	for(Exemplaire exemplaire : exemplaires){
    		if(exemplaire.getOeuvre() == oeuvre){
    			count++;
    		}
    	}
    	return count;
    }
    
    public void afficherAuteur(boolean estAuteurStocke){
    	for(Exemplaire exemplaire : exemplaires){
    		if(estAuteurStocke == true){
    			if(exemplaire.getOeuvre().getAuteur().getPrix() == true){
    				System.out.println(exemplaire.getOeuvre().getAuteur().getNom());
    			}
    		}
    		else{
    			if(exemplaire.getOeuvre().getAuteur().getPrix() == false){
    				System.out.println(exemplaire.getOeuvre().getAuteur().getNom());
    			}
    		}
    		
    	}
    }
    
    public void afficherAuteur(){
    	for(Exemplaire exemplaire : exemplaires){
    		if(exemplaire.getOeuvre().getAuteur().getPrix() == true){
				System.out.println(exemplaire.getOeuvre().getAuteur().getNom());
			}
    	}
    }
}

public class Biblio {
	
    public static void afficherExemplaires(ArrayList<Exemplaire> exemplaires) {
        for (Exemplaire exemplaire : exemplaires) {
            System.out.print("\t");
            exemplaire.afficher();
        }
    }
	
    public static void main(String[] args) {
        // create and store all the exemplaries
        Auteur a1 = new Auteur("Victor Hugo", false);
        Auteur a2 = new Auteur("Alexandre Dumas", false);
        Auteur a3 = new Auteur("Raymond Queneau", true);
       
        Oeuvre o1 = new Oeuvre("Les Miserables", a1, "francais");
        Oeuvre o2 = new Oeuvre("L\'Homme qui rit", a1, "francais");
        Oeuvre o3 = new Oeuvre("Le Comte de Monte-Cristo", a2, "francais");
        Oeuvre o4 = new Oeuvre("Zazie dans le metro", a3, "francais");
        Oeuvre o5 = new Oeuvre("The count of Monte-Cristo", a2, "anglais");
        
        Bibliotheque biblio = new Bibliotheque("municipale");
        biblio.stocker(o1, 2);
        biblio.stocker(o2);
        biblio.stocker(o3, 3);
        biblio.stocker(o4);
        biblio.stocker(o5);
        
        // ...
        System.out.println("La bibliotheque " + biblio.getNom() + " offre ");
        afficherExemplaires(biblio.listerExemplaires());
        String langue = "anglais";
        System.out.println("Les exemplaires en " + langue + " sont  ");
        afficherExemplaires(biblio.listerExemplaires(langue));
        System.out.println("Les auteurs a succes sont  ");
        biblio.afficherAuteur();
        System.out.print("Il y a " + biblio.compterExemplaires(o3) + " exemplaires");
        System.out.println(" de  " + o3.getTitre()); 
    }
}

